#pragma once
#include <vector>
#include <string>
#include <regex>
#include <unordered_map>
#include <map>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include "SerializableRegex.h"
#include "unordered_map_serialization.h"
#include "ElementHidingCollection.h"
#include "FilterList.h"
#include <vector>
#include <memory>

using namespace std;

class CFilterManager
{
public:
	CFilterManager(void);
	~CFilterManager(void);
	
	bool MatchAdvertFilter(const wstring& srcElement);

	void CFilterManager::AddFilterList(shared_ptr<CFilterList> newFilterList);

	vector<shared_ptr<CElementHidingCollection>> GetElementHidingCollections();
	
private:
	const unsigned int SHORTCUTS_SIZE;

	std::vector<shared_ptr<CFilterList>> _filterLists;
	
	bool MatchFiltersWithShortcuts(const wstring& srcElement);
	bool MatchFiltersWithoutShortcuts(const wstring& srcElement);
};

